Materi OSN-K

Memori Lokal, Variabel & Tipe Data Dasar

Konteks OSN: Kenapa Belajar Ini?

Di OSN, jarang ada soal yang meminta kamu menulis program dari nol. Kamu justru diminta membaca program rumit buatan juri. Tanpa insting Tracing Memori yang kuat, kamu akan tersesat di tengah-tengah soal tipe "Berapa keluaran dari program berikut?".

💡 Intuisi & Analogi Jaman Now

"Bayangkan variabel itu seperti loker penitipan barang di stasiun yang hanya muat 1 barang. Jika loker berlabel X awalnya berisi 'Sepatu', lalu kamu memasukkan 'Tas', maka 'Sepatu' tersebut langsung dibuang dan hilang. Komputer tidak menyimpan riwayat masa lalu!"

Rasa Ingin Tahu: Kenapa komputer hapus data lama?

Komputer punya RAM (memori) yang terbatas. Daripada menumpuk ribuan versi lama dari sebuah variabel, jauh lebih efisien dan cepat jika memori itu ditimpa (overwrite). Kalau kamu butuh data lamanya, kamu harus sengaja membuat variabel baru untuk menyimpannya.

Apa yang Sering Dikira Pemula

Mengira tanda = itu berarti "setara" seperti di pelajaran Matematika. Sehingga kalau ada a = b, dipikir "oh berarti nilai a akan selalu sama dengan b ke depannya."

Yang SEBENARNYA Terjadi

= di C++ adalah perintah Assignment (Pemaksaan). a = b artinya: "Ambil nilai b SAAT INI, lalu paksa masuk ke loker a." Setelah itu, mereka tidak ada hubungan lagi. Jadilah robot compiler: baca dari atas ke bawah.

Tebak Dulu Sebelum Lanjut!

int a = 5;
int b = a + 2;
a = b - 1;
b = a * a;

Menurutmu, berapa nilai akhir a dan b di akhir program ini?

Tampilkan Jawaban
Jika tebakanmu a = 6 dan b = 36, selamat! Insting tracing-mu sudah benar. Masih bingung? Mari kita buktikan di bawah.

Visualisasi Tracing Variabel

// Simulasi Eksekusi C++
int a = 5;
int b = a + 2;
a = b - 1;
b = a * a;
Paused

📝 Contoh Sederhana & Alur Eksekusi

Mari kita lihat bagaimana memori komputer melacak nilai variabel baris demi baris. Perhatikan kode di bawah ini, tanda // berarti baris komentar (hanya catatan untuk manusia, diabaikan oleh komputer).

int dompet = 50000; // Langkah 1: Siapkan loker 'dompet', masukkan angka 50000. int cilok = 10000; // Langkah 2: Siapkan loker 'cilok', masukkan angka 10000. // Langkah 3: Komputer menghitung (50000 - 10000) = 40000. // Nilai 40000 ini DIPAKSA MASUK kembali ke loker 'dompet'. Nilai 50000 hilang! dompet = dompet - cilok; // Langkah 4: Komputer melihat 'dompet' sekarang isinya 40000. // Menghitung (40000 - 10000) = 30000. Loker 'dompet' kini berisi 30000. dompet = dompet - cilok;

👩‍🏫 Secara Formal: Memori dalam OSN

Dalam soal OSN, kemampuan melacak memori baris-demi-baris secara runut disebut Tracing (Penelusuran). Kamu tidak boleh menebak-nebak, tapi harus membaca kode persis seperti komputer membacanya secara sekuensial (berurutan dari atas ke bawah).

Kamus Tipe Data Dasar

Sebelum bisa menggunakan variabel, kita wajib mendeklarasikan tipe datanya. Berikut yang paling sering muncul:

  • int (Integer): Khusus bilangan bulat. Rentangnya maksimal sekitar ~2 miliar.
  • long long: Bilangan bulat yang super besar. Digunakan jika soal OSN memiliki batasan angka hingga 1018.
  • bool (Boolean): Logika benar/salah. Hanya menyimpan dua nilai: true (1) atau false (0).

Pola Pikir Salah yang Sering Terjadi (Common Wrong Thinking)

Miskonsepsi 1: "Tanda `=` itu artinya nilainya sama persis kayak di Aljabar."

Kenapa Salah? Di C++, `=` adalah operator Assignment (Penugasan). Ia BUKAN membandingkan, melainkan MEMAKSA loker di sebelah kiri untuk diisi dengan hasil perhitungan di sebelah kanan. Kalau mau membandingkan, kita pakai `==`.

Miskonsepsi 2: "Hasil dari `5 / 2` (dengan tipe data integer) adalah 2.5."

Kenapa Salah? Komputer itu pelit! Kalau tipenya `int` (bilangan bulat), maka `5 / 2` hasilnya `2`. Sisa desimalnya (0.5) dibuang begitu saja (Truncation), bukan dibulatkan. Hati-hati, banyak peserta gugur di sini.

Latihan Bertingkat (Progressive Tracing)

Level 1: Pemanasan

int x = 10;
x = x + 5;
x = x * 2;

Tampilkan Jawaban
Baris 1: Loker x diisi 10.
Baris 2: Hitung (10 + 5) = 15. Paksa masuk ke x. Nilai 10 musnah.
Baris 3: Hitung (15 * 2) = 30. Paksa masuk ke x.
Akhir: x = 30
Level 2: Menengah (Tukar Nilai)

int a = 3;
int b = 7;
int temp = a;
a = b;
b = temp;

Tampilkan Jawaban
Ini adalah teknik klasik menukar (swap) nilai dua variabel.
1. Loker temp meng-copy isi a (3).
2. Loker a ditimpa isi b (7). Sekarang a = 7.
3. Loker b ditimpa isi temp (3).
Akhir: a = 7, b = 3 (Nilai berhasil ditukar).

Checkpoint: Uji Pemahamanmu

Coba jelaskan dengan bahasamu sendiri: Apa yang terjadi jika pada "Level 1: Pemanasan" tadi, nilai awal x diganti menjadi 0? Apakah x = x * 2 pada akhirnya akan membuat hasilnya tetap 0?

Tampilkan Jawaban
Tidak tetap 0! Jika x = 0, maka setelah baris kedua x = 0 + 5 nilainya menjadi 5. Lalu pada baris ketiga x = 5 * 2 nilainya menjadi 10. Jangan terjebak "kalau awalnya 0 dikali berapapun tetap 0", karena ingat: komputer mengeksekusi berurutan!

Rangkuman Kilat

Core Idea: "Variabel hanyalah kotak penyimpan tunggal; operasi assignment (=) secara kejam menimpa kotak tersebut dengan nilai baru tanpa peduli masa lalunya."

  • = artinya timpa loker kiri dengan hasil hitungan di kanan.
  • Komputer mengeksekusi dari atas ke bawah, baris demi baris.
  • Tipe data int membuang habis angka desimal tanpa pembulatan.

Lab Mandiri: Coba Tracing Sendiri!

Hitung manual nilai akhir X dan Y dari logika kode di bawah ini layaknya soal OSN Kabupaten.

int x = 10;
int y = 5;
x = x + y;
y = x - y;
x = x - y;
x = x * 2;
Materi OSN-K

Logika Percabangan & If-Else

Konteks OSN: Kenapa Belajar Ini?

Di OSN, if-else sering dibuat bertumpuk (nested) dan sangat kompleks. Pembuat soal suka menjebak dengan kondisi yang terlihat benar secara kasat mata, padahal dievaluasi berbeda oleh komputer karena aturan prioritas logika (AND/OR).

💡 Intuisi & Analogi Jaman Now

"Percabangan itu mirip milih rute di Google Maps. Kalau jalan A macet (kondisi true), kamu disuruh lewat rute alternatif. Kalau lancar (kondisi false), kamu tetap di jalan utama."

Cek Prasyarat: Sudah Paham Beda = dan == ?

Sebelum masuk ke Percabangan, kamu WAJIB tahu perbedaan dua simbol ini:
a = 5 (Assignment): Memaksa loker a diisi angka 5. Hasilnya selalu true (jika bukan 0).
a == 5 (Comparison): Bertanya, "Apakah isi loker a itu 5?" Jawabannya murni true atau false.
Sangat banyak peserta OSN salah ketik if (a = 5) yang membuat kondisinya selalu True!

Mental Model: Evaluasi Malas (Short-Circuit)

Komputer itu pemalas dan efisien. Ia akan berhenti mengecek syarat begitu kesimpulannya sudah pasti.

  • Logika AND (&&): Seperti masuk wahana: "Harus bawa tiket DAN tinggi 150cm". Kalau kamu nggak bawa tiket, petugas nggak usah repot-repot ngukur tinggi kamu. Pasti ditolak!
  • Logika OR (||): Seperti jalur VIP: "Bawa kartu VIP ATAU bawa surat sakti". Kalau kamu bawa kartu VIP, petugas langsung mempersilakan masuk tanpa ngecek surat saktimu.

Visualisasi Short-Circuit Evaluation

// Evaluasi Ekspresi #1
bool kondisi1 = (5 > 2) && (10 != 10);

// Evaluasi Ekspresi #2
bool kondisi2 = (!false) || (3 <= 1);
Paused

📝 Contoh Sederhana & Alur Logika

Mari kita lihat bagaimana komputer membaca perintah if:

int tiket = 0; // 0 artinya tidak punya tiket int tinggi = 160; // Komputer mengecek dari kiri ke kanan: // 1. Cek (tiket > 0). Karena tiket 0, hasilnya FALSE. // 2. Karena pakai && (AND) dan syarat pertama sudah FALSE, // komputer LANGSUNG SKIP mengecek (tinggi >= 150). (Short-circuit!) if (tiket > 0 && tinggi >= 150) { print("Boleh naik"); } else { print("Tidak boleh naik"); }

Visual Reasoning: Cara Komputer Membaca if di atas

Langkah Aksi Komputer Hasil Evaluasi Kesimpulan
1 Cek (tiket > 0) FALSE Karena tiket=0
2 Lihat operator && (AND) AND butuh semua TRUE
3 Cek (tinggi >= 150) SKIPPED Karena Kiri sudah FALSE (Short-Circuit)

💡 Ambil Nafas Sejenak!

Logika && dan || memang agak menjebak. Jika kamu lelah, regangkan badan. Intinya: Komputer selalu cari jalan termalas untuk menentukan True/False!

👩‍🏫 Secara Formal: Operator Logika & Relasional

Blok if mengevaluasi sebuah kondisi boolean. Jika kondisinya true, blok kode di dalamnya dijalankan. Jika tidak, akan dilewati atau mengeksekusi blok else.

Bedah Tabel Logika

  • && (AND): Bernilai true HANYA JIKA kedua sisi bernilai true. (Sifat Short-circuit: Jika kiri false, kanan tidak dihiraukan).
  • || (OR): Bernilai true jika SALAH SATU sisi true. (Sifat Short-circuit: Jika kiri sudah true, kanan tidak dihiraukan).
  • ! (NOT): Membalik kondisi (True jadi False, False jadi True).

Pola Pikir Salah yang Sering Terjadi (Common Wrong Thinking)

Miskonsepsi 1: "Kesalahan ketik if (a = 5) itu akan error."

Kenapa Salah? Tidak akan error! Komputer akan memasukkan nilai 5 ke a, lalu menganggap nilai 5 itu bernilai true (semua angka selain 0 dianggap true). Blok `if` akan SELALU tereksekusi. Ini bug yang paling susah dicari oleh pemula. Biasakan pakai ==.

Miskonsepsi 2: "Semua baris di dalam if (A && B) pasti dieksekusi komputernya."

Kenapa Salah? Ingat sifat Short-Circuit! Jika A sudah `false`, sisi B TIDAK PERNAH DIBACA sama sekali. Jika B adalah fungsi yang menambah variabel (misal: x++), variabel `x` tidak akan bertambah nilainya!

Latihan Bertingkat (Percabangan)

Level 1: Pemanasan

int x = 10;
if (x > 5) {
  x = x - 5;
}
x = x * 2;

Tampilkan Jawaban
1. x awalnya 10.
2. Cek: Apakah 10 > 5? TRUE.
3. Karena TRUE, masuk ke dalam kurung kurawal. x = 10 - 5 = 5.
4. Lanjut ke baris terakhir: x = 5 * 2 = 10.
Akhir: x = 10
Level 2: Menengah (Jebakan Short-Circuit)

int y = 0;
int z = 5;
if (y > 0 && ++z > 0) {
  y = 1;
}

Tampilkan Jawaban
1. Cek sisi Kiri: (0 > 0) adalah FALSE.
2. Karena AND (&&) butuh keduanya benar, dan sisi kiri sudah FALSE, maka komputer SKIP sisi kanan.
3. Perintah ++z TIDAK PERNAH DIJALANKAN! z tetap 5.
Akhir: y = 0, z = 5.

Rangkuman Kilat & Pattern OSN

Core Idea: "If-Else adalah jalan tol bercabang, di mana gerbangnya (logika) dievaluasi dengan cara yang sangat malas (short-circuit)."

  • AND (&&): Jika kiri FALSE, kanan SKIP (hasil otomatis FALSE).
  • OR (||): Jika kiri TRUE, kanan SKIP (hasil otomatis TRUE).
  • Jangan tertukar = (Penugasan) dengan == (Perbandingan).

Pattern Recognition (Kapan memikirkan ini?)

Di OSN, saat melihat soal dengan banyak && dan ||, JANGAN hitung sisi kanannya dulu! Cek sisi kiri, kalau sudah pasti hasil akhirnya (TRUE untuk OR, FALSE untuk AND), langsung coret sisi kanannya agar menghemat waktu hitungmu.

Lab OSN: Truth Checker

Evaluasi nilai kebenaran akhir dari kumpulan percabangan memusingkan yang rawan menjebak peserta Olimpiade di bawah ini:

(5 > 2) && (10 != 10)
!false || (3 <= 1)
Materi OSN-K

Perulangan (Loop)

Konteks OSN: Kenapa Belajar Ini?

Soal OSN hampir selalu mengandung for loop bersarang (nested loop). Jika kamu tidak tahu cara kerja pasti sebuah loop, kamu tidak akan bisa memprediksi seberapa lama kode berjalan, dan programmu bisa terkena Time Limit Exceeded (TLE)!

💡 Intuisi & Analogi Jaman Now

"Mikirin For loop tuh layaknya mesin fotokopi. Kamu setting 10 lembar sebagai target. Mesin akan mencetak (1, 2, 3...) dan langsung berhenti begitu konternya mencapai 10."

Mental Model: Satpam dan Pekerja

Sebuah loop punya dua tokoh fiktif di dalamnya:

  • Sang Satpam (Syarat/Kondisi): Berdiri di pintu depan. Setiap kali putaran mau mulai, satpam nanya: "Syarat masih terpenuhi nggak?". Kalau false, pintu langsung dikunci rapat.
  • Sang Pekerja (Modifier): Bertugas menghitung (misal: nambah 1). Pekerja ini selalu bertugas di PALING AKHIR setelah blok kode di dalam kurung kurawal selesai.

Tebak Dulu Sebelum Lanjut!

for (int i = 1; i <= 3; i++) {
  for (int j = 1; j <= i; j++) {
    print("Bintang");
  }
}

Secara total, berapa kali kata "Bintang" akan dicetak?

Tampilkan Jawaban
Jawabannya adalah 6 kali! (1 kali saat i=1, 2 kali saat i=2, 3 kali saat i=3. Total: 1+2+3 = 6). Mari kita lihat visualisasinya di bawah.

Visualisasi Eksekusi Loop ( i & j )

// Loop Simulator
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= i; j++) {
        print("Bintang");
    }
}
Paused

📝 Contoh Sederhana & Anatomi Loop

// Anatomi FOR Loop: for (AWAL; SYARAT; MODIFIER) for (int i = 1; i <= 3; i++) { print(i); } // Hasil: 1 2 3 // Saat i menjadi 4, syarat (4 <= 3) bernilai FALSE, loop BERHENTI.

👩‍🏫 Secara Formal: Eksekusi Mutlak Loop

Mekanisme for loop selalu mengeksekusi urutan 4 langkah ini secara ketat:
1) Inisialisasi (int i = 1) - Dieksekusi HANYA SEKALI di awal.
2) Evaluasi Syarat (i <= 3) - Jika true lanjut, jika false loop selesai seketika.
3) Eksekusi Blok (Isi di dalam {}).
4) Modifier (i++) - Dijalankan, lalu kembali mengulang ke langkah 2.

Pola Pikir Salah yang Sering Terjadi (Common Wrong Thinking)

Miskonsepsi 1: "Loop for(int i=0; i<3; i++) berjalan 4 kali karena dari 0 sampai 3."

Kenapa Salah? Hitung pakai jari: 0, 1, 2. Saat i jadi 3, syarat 3 < 3 itu FALSE! Pintu langsung ditutup. Jadi loop ini pas berjalan 3 kali. Ini disebut Off-by-one Error.

Miskonsepsi 2: "Modifier i++ jalan duluan sebelum blok kode di eksekusi."

Kenapa Salah? Modifier itu seperti petugas kebersihan. Dia baru kerja menyapu setelah pengunjung (blok kode) selesai bermain dan keluar. Urutannya: Cek Syarat -> Jalankan Blok -> Eksekusi Modifier.

Latihan Bertingkat (Iterasi Loop)

Level 1: Pemanasan

int x = 0;
for (int i = 1; i <= 3; i++) {
  x = x + 2;
}

Tampilkan Jawaban
Loop berjalan 3 kali (i=1, i=2, i=3).
Setiap jalan, x ditambah 2.
Berarti: 0 + 2 + 2 + 2 = 6.
Akhir: x = 6
Level 2: Tipe OSN (Infinite Loop Trap)

int ans = 0;
for (int i = 5; i > 0; i++) {
  ans++;
}

Tampilkan Jawaban
Perhatikan i++! Bukannya berkurang ke 0, i malah makin besar (5, 6, 7...).
Syarat i > 0 akan SELALU TRUE selamanya.
Akhir: Program macet (Infinite Loop / Time Limit Exceeded).

Rangkuman Kilat & Pattern OSN

Core Idea: "Loop adalah pekerja yang taat; ia selalu mengecek syarat (Satpam) sebelum bekerja, dan baru menjalankan modifier setelah selesai bekerja."

  • for(awal; syarat; modifier).
  • Syarat dicek SEBELUM masuk blok (Satpam).
  • Modifier dijalankan SETELAH blok selesai (Pekerja).
  • Waspada jebakan kondisi yang bikin loop jalan selamanya (Infinite Loop).

Pattern Recognition (Kapan memikirkan ini?)

Di soal OSN yang meminta output akhir dari nested loop, cari pola angkanya (seperti deret matematika). Jangan menelusuri ratusan iterasi secara manual! Contoh: Loop dalam berjalan i kali, loop luar n kali. Itu sama dengan Deret Aritmatika 1 + 2 + ... + n.

Lab OSN: Prediksi Iterasi Loop Bersarang

Berapa kali persisnya sistem akan mencetak string "Bintang" pada potongan C++ ini?

int count = 0;
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= i; j++) {
        print("Bintang");
        count++;
    }
}
Materi OSN-K

Konsep Fungsi & Scope Variabel

Konteks OSN: Kenapa Belajar Ini?

Di soal rekursi OSN (pemanggilan fungsi berulang), nilai variabel sering dipindah-pindah lewat parameter fungsi. Jika kamu tidak paham bedanya Copy (Value) vs Asli (Reference), hasil hitungan akhirmu dijamin akan salah total!

💡 Intuisi & Analogi Jaman Now

"Pass by Value itu ibarat ada teman nitip catetan tugas ke kamu. Kamu fotokopi catetannya, terus kamu coret-coret kopiannya. Catetan aslinya tetap aman, kan? Kamu cuma mainin data tiruan (Copy)."

"Tapi kalau Pass by Reference (yang pakai simbol &), kamu minjem buku aslinya langsung. Kalau bukunya kamu coret, ya buku temanmu itu benar-benar rusak karena itu buku yang sama (Alias ke memori asli)!"

Mental Model: Dinding Kaca (Scope)

Anggap setiap fungsi { ... } adalah ruang kaca tertutup kedap suara.

  • Variabel x di Fungsi A TIDAK SAMA dengan variabel x di Fungsi B, meski namanya sama! Mereka beda orang di ruangan yang beda.
  • Kecuali ada yang membocorkan alamat ruangan pakai jalur khusus (Pointer/Reference &).

Cek Prasyarat: Konsep Alamat Memori

Setiap variabel tidak hanya punya NILAI, tapi juga ALAMAT MEMORI (seperti alamat rumah). Saat kita melakukan pass-by-value, yang dikirim hanya nilai-nya (kopian). Saat kita melakukan pass-by-reference dengan &, yang dikirim adalah ALAMAT RUMAH-nya. Jadi si penerima bisa langsung mengacak-acak isi rumah aslinya!

Visualisasi Copy vs Reference

// Pass by Value vs Reference
void addFive(int x) { // Pass by Value
    x = x + 5;
}

void addFiveRef(int &y) { // Pass by Reference
    y = y + 5;
}

// Simulasi Main
int a = 10;
int b = 10;

addFive(a);    // A tetap 10
addFiveRef(b); // B jadi 15
Paused

📝 Contoh Sederhana: Scope (Ruang Lingkup)

int skorGlobal = 100; // Variabel Global: bisa diakses dari mana saja void main() { int x = 5; // Variabel Lokal: HANYA hidup di dalam kurung kurawal main() if (x > 0) { int y = 10; // Variabel Super Lokal: HANYA hidup di dalam blok IF ini! print(x); // Boleh, x ada di luar blok ini } print(y); // ERROR! y sudah 'mati' dan terhapus dari memori saat keluar dari blok IF }

👩‍🏫 Secara Formal: Fungsi & Scope Memori

Dalam C++, Fungsi adalah sub-program yang memiliki lokalisasi memori (Local Scope). Variabel yang dibuat di dalam kurung kurawal {} sebuah fungsi (atau if/for) akan hancur/dihapus otomatis oleh memori ketika blok tersebut berakhir. Ini menjaga agar data antar fungsi tidak saling bertabrakan.

Pola Pikir Salah yang Sering Terjadi (Common Wrong Thinking)

Miskonsepsi 1: "Kalau nama parameternya sama, berarti mereka variabel yang sama."

Kenapa Salah? Meski sama-sama bernama x, kalau yang satu di main() dan yang satu di void hitung(int x), mereka adalah dua variabel berbeda di memori! Mengubah `x` di dalam `hitung()` tidak akan ngefek ke `x` di dalam `main()` (kecuali pakai &).

Miskonsepsi 2: "Variable Global itu selalu menang melawan variabel lokal."

Kenapa Salah? Justru sebaliknya! Ini disebut Variable Shadowing. Kalau kamu bikin variabel lokal bernama A, sedangkan di global juga ada A, komputer akan memakai yang paling dekat (Lokal). Variabel globalmu jadi "terbayangi" dan tidak terubah!

Latihan Bertingkat (Fungsi & Scope)

Level 1: Pemanasan

void ubah(int a) {
  a = a + 5;
}

int x = 10;
ubah(x);

Tampilkan Jawaban
Tidak ada tanda &, berarti ini Pass-by-Value (Copy).
Yang diubah jadi 15 hanyalah fotokopiannya (a di dalam fungsi).
Akhir: Variabel asli x tetap 10.
Level 2: Tipe OSN (Shadowing)

int x = 1; // Global

void test() {
  int x = 5; // Lokal
  x = x * 2;
}

test();

Tampilkan Jawaban
Fungsi test() membuat variabel lokal bernama x, membayangi (shadowing) x global.
Yang dikali 2 (jadi 10) adalah x lokal tersebut.
Saat fungsi selesai, x lokal dihancurkan.
Akhir: Variabel global x tetap 1.

Checkpoint: Uji Pemahamanmu

Coba jelaskan dengan bahasamu sendiri: Apa jadinya jika kita memanggil fungsi addFive(10) (mengirim angka literal, bukan variabel) pada fungsi pass-by-reference void addFive(int &y)?

Tampilkan Jawaban
Akan Error (Kompilasi Gagal)! Angka 10 adalah angka harfiah (literal) yang tidak memiliki "loker/alamat memori" yang bisa dirujuk oleh &. Pass by reference mewajibkan kamu mengirim sebuah variabel asli (yang punya loker memori).

Rangkuman Kilat & Pattern OSN

Core Idea: "Nama variabel yang sama di dalam fungsi yang berbeda adalah dua entitas yang berbeda, kecuali dihubungkan oleh portal dimensi bernama Reference (&)."

  • Tanpa & (Value): Memanipulasi copy. Data asli aman.
  • Pakai & (Reference): Mengubah alias. Data asli ikut berubah seketika.
  • Scope: Variabel berkuasa hanya di dalam blok tempat ia dilahirkan (diapit {}).

Pattern Recognition (Kapan memikirkan ini?)

Dalam soal rekursi OSN tingkat Kabupaten/Provinsi, perhatikan deklarasi fungsi. Jika ada & pada variabel penampung hasil (seperti void dfs(int node, int &ans)), berarti akumulasi hasil akan persisten menembus tumpukan rekursi. Jika tidak ada, variabel itu akan reset setiap kali rekursi naik ke atas (backtrack)!

Lab OSN: Tracing Amperstand Teka-teki

Tebak output kode C++ dengan pemanggilan by-Reference ini!

void testFunc(int x, int &y) {
    x = x + 5;
    y = y + 5;
}

int main() {
    int a = 10;
    int b = 10;
    testFunc(a, b);
    // Berapakah nilai a dan b sekarang?
}

Question Card

Jika sebuah variabel dideklarasikan di dalam sebuah fungsi, bisakah variabel tersebut diakses dari fungsi lain? Apa alasannya?

Modul Minggu 1 Selesai!